package SIC.Vue;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Font;
import java.awt.GridLayout;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;

import SIC.Controleur.Controleur;

/**
 * Cette classe est une fenêtre, on y crée l'IHM
 */
public class Vue extends JFrame{
 
	private static final long serialVersionUID = 1L;
	
	private JButton bouton1 = new JButton("Etape 1 : Récupérer les données FAO");
    private JButton bouton2 = new JButton("Etape 2 : Créer l'ontologie styloFAO.owl");
    private JButton bouton3 = new JButton("Etape 1 : Récupérer les données CAO");
    private JButton bouton4 = new JButton("Etape 2 : Créer l'ontologie styloCAO.owl");
    private JButton bouton5 = new JButton("Etape 3 : Récupérer les correspondances");
    private JButton bouton6 = new JButton("Etape 4 : Créer le fichier de mapping styloCAO_FAO.owl");
    private JButton bouton7 = new JButton("Etape 5 : Lancer le raisonneur");
    
    boolean enableBouton5 = false;
    
    private JPanel conteneurPrincipal = new JPanel();
    private JPanel north = new JPanel();
    private JPanel south = new JPanel();
    private JPanel center = new JPanel();

    private JTextArea contenu = new JTextArea("");
    
    private JLabel titreAction = new JLabel("Aucune action");
    
    Controleur controleur;

    public Vue(Controleur controleur){
        
    	this.controleur = controleur;
    	
		this.setTitle("OWL-Mapping");
		this.setSize(795, 815);
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		this.setResizable(false);
		this.setLocationRelativeTo(null);
		
		ajouterConteneurPrincipale();
		ajouterLabelAction();
		ajoutChampsTexte();
		ajouterBoutons();
        
		this.setVisible(true);
		
    }
 
    void ajouterConteneurPrincipale()
    {
		conteneurPrincipal.setBackground(Color.WHITE);
		conteneurPrincipal.setLayout(new BorderLayout());
		
		this.setContentPane(conteneurPrincipal);
    }
    
    void ajouterLabelAction()
    {
        Font police = new Font("Tahoma", Font.BOLD, 16 );
		titreAction.setFont(police);
		titreAction.setForeground(Color.WHITE);
		titreAction.setHorizontalAlignment(JLabel.CENTER);
		north.setBackground(new Color(182,182,182));
		north.add(titreAction);
		conteneurPrincipal.add(north, BorderLayout.NORTH);
    }
    
    
    void ajoutChampsTexte()
    {
    	
        Font police = new Font("Arial", Font.PLAIN, 14);
        contenu.setFont(police);
        contenu.setColumns(68);
        contenu.setRows(34);
        contenu.setForeground(Color.BLUE);
        contenu.setMargin(new Insets(5,5,5,5));
        contenu.setLineWrap(true); //retour à la ligne si trop large
        
        JScrollPane scroll = new JScrollPane(contenu);
        scroll.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
        center.add(scroll);

        contenu.setText("Mathéossian Dimitri - 10604950 \n\n" +
        		"Bienvenue dans le mini-logiciel OWL-Mapping. \n\n" +
        		"Certain boutons seront activés au fur et à mesure de la procédure. \n\n" +
        		"Les étapes :\n" +
        		"* La récupération des données (étape 1) est obligatoire pour le CAO et le FAO, \n" +
        		"sinon vous ne pourrez pas créer de fichier OWL (étape 2).\n\n" +
        		"* Le fichier de correspondances est en XML (étape 3), \n" +
        		"et les données qu'il contient sont récupérées pour le mapping (étape 4). \n\n" +
        		"* Une fois le mapping effectué, vous pourrez appliquer le raisonneur PELLET \n" +
        		"sur le fichier de mapping (étape 5)." +
        		"\n\n" +
        		"-------------------------------------------------------------------------------" +
        		"\n\n" +
        		"Quelques précisions : \n\n" +
        		"- Les fichiers OWL sont supprimés à chaque redémarrage du logiciel (DossierOWL)\n" +
        		"- La création de la BDD est lancée dans la classe SIC.Main.Main\n" +
        		"- Le résultat du raisonneur n'est pas enregistré dans un fichier");
        
        conteneurPrincipal.add(center, BorderLayout.CENTER);
    }
    
    void ajouterBoutons()
    {   
    	south.setLayout(new GridLayout(2,1));
    	
        JPanel southTop = new JPanel(new GridLayout(2,2));
        JPanel southBot = new JPanel(new GridLayout(3,1));
       
        bouton2.setEnabled(false);
        bouton4.setEnabled(false);
        bouton5.setEnabled(false);
        bouton6.setEnabled(false);
        bouton7.setEnabled(false);
        
        southTop.add(bouton1);
        southTop.add(bouton3);
        southTop.add(bouton2);
        southTop.add(bouton4);
        
        southBot.add(bouton5);
        southBot.add(bouton6);
        southBot.add(bouton7);
        
        south.add(southTop, BorderLayout.NORTH);
        south.add(southBot, BorderLayout.SOUTH);
        
        conteneurPrincipal.add(south, BorderLayout.SOUTH);
         
        bouton1.addActionListener(new Bouton1Listener());
        bouton2.addActionListener(new Bouton2Listener());
        bouton3.addActionListener(new Bouton3Listener());
        bouton4.addActionListener(new Bouton4Listener());
        bouton5.addActionListener(new Bouton5Listener());
        bouton6.addActionListener(new Bouton6Listener());
        bouton7.addActionListener(new Bouton7Listener());
    }
    

    class Bouton1Listener implements ActionListener{

        public void actionPerformed(ActionEvent arg0) {
        	titreAction.setText("Vous venez de récupérer les données du fichier Express");
        	contenu.setText(controleur.chargerDataFAO());
        	contenu.setCaretPosition(0);
            bouton2.setEnabled(true);
        }     
    }
    

    class Bouton2Listener implements ActionListener{

		public void actionPerformed(ActionEvent e) {
			titreAction.setText("Vous venez de créer un fichier OWL depuis les données FAO récupérées"); 
			contenu.setText(controleur.creerOWLFAO());
			contenu.setCaretPosition(0);
			if(enableBouton5)
				bouton5.setEnabled(true);
			else
				enableBouton5 = true;

		}      
    }

    class Bouton3Listener implements ActionListener{

        public void actionPerformed(ActionEvent e) {
                titreAction.setText("Vous venez de récupérer les données CAO présentes dans la BDD"); 
                contenu.setText(controleur.chargerDataCAO());
                contenu.setCaretPosition(0);
                bouton4.setEnabled(true);
        }      
    }
    
    class Bouton4Listener implements ActionListener{

        public void actionPerformed(ActionEvent e) {
                titreAction.setText("Vous venez de créer un fichier OWL depuis les données CAO récupérées");
                contenu.setText(controleur.creerOWLCAO());
                contenu.setCaretPosition(0);
    			if(enableBouton5)
    				bouton5.setEnabled(true);
    			else
    				enableBouton5 = true;
        }      
    }
    
    class Bouton5Listener implements ActionListener{

        public void actionPerformed(ActionEvent e) {
                titreAction.setText("Vous avez récupéré les correspondances entre le stylo CAO et FAO");
                contenu.setText(controleur.chargerCorrespondancesCAOFAO());
                contenu.setCaretPosition(0);
                bouton6.setEnabled(true);
        }      
    }
    
    class Bouton6Listener implements ActionListener{

        public void actionPerformed(ActionEvent e) {
                titreAction.setText("Vous venez de créer le fichier de mapping en OWL");
                contenu.setText(controleur.creerFichierMappingOWL());
                contenu.setCaretPosition(0);
                bouton7.setEnabled(true);
        }      
    }
    
    class Bouton7Listener implements ActionListener{

        public void actionPerformed(ActionEvent e) {
                titreAction.setText("Voici le résultat donné par le raisoneur");
                contenu.setText(controleur.lancerReasoner());
                contenu.setCaretPosition(0);
        }      
    }
}

